import axios from 'axios'
import { getToken, removeToken } from './token'

// 配置选项 - 可以根据需要切换token发送方式
const tokenConfig = {
  useAuthorizationHeader: false, // true: 使用Authorization头的Bearer格式, false: 使用token字段
  tokenHeaderName: 'token' // 当useAuthorizationHeader为false时使用的头部字段名
}

const service = axios.create({
  // axios中请求配置有baseURL选项，表示请求URL公共部分
  // 这个路径是从.env.xxx文件中读取的
  baseURL: 'http://localhost:8080',
  // 超时
  timeout: 10000
  // 移除withCredentials配置，因为我们不再使用Cookie
})

// 请求拦截器
service.interceptors.request.use(config => {
  const token = getToken(); // 使用工具函数从localStorage获取token
  if (token) {
    if (tokenConfig.useAuthorizationHeader) {
      config.headers.Authorization = `Bearer ${token}`;
    } else {
      config.headers[tokenConfig.tokenHeaderName] = token;
    }
  }
  return config;
}, error => {
  console.error('请求拦截器错误:', error);
  return Promise.reject(error);
});

// 响应拦截器
service.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    // 处理token过期或认证失败的情况
    if (error.response && error.response.status === 401) {
      // 清除存储的token
      removeToken();
      // 可以跳转到登录页
      // window.location.href = '/login';
    }
    return Promise.reject(error);
  }
);

// 导出axios实例
// 同时导出token配置，方便其他地方修改

export default service
export { tokenConfig }